/*
 * Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved.
 * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */

package com.sun.corba.se.impl.ior;

import java.util.Iterator;

import org.omg.CORBA_2_3.portable.OutputStream;

import com.sun.corba.se.spi.ior.ObjectAdapterId;

abstract class ObjectAdapterIdBase implements ObjectAdapterId {
    public boolean equals(Object other) {
        if (!(other instanceof ObjectAdapterId))
            return false;

        ObjectAdapterId theOther = (ObjectAdapterId) other;

        Iterator iter1 = iterator();
        Iterator iter2 = theOther.iterator();

        while (iter1.hasNext() && iter2.hasNext()) {
            String str1 = (String) (iter1.next());
            String str2 = (String) (iter2.next());

            if (!str1.equals(str2))
                return false;
        }

        return iter1.hasNext() == iter2.hasNext();
    }

    public int hashCode() {
        int result = 17;
        Iterator iter = iterator();
        while (iter.hasNext()) {
            String str = (String) (iter.next());
            result = 37 * result + str.hashCode();
        }
        return result;
    }

    public String toString() {
        StringBuffer buff = new StringBuffer();
        buff.append("ObjectAdapterID[");
        Iterator iter = iterator();
        boolean first = true;
        while (iter.hasNext()) {
            String str = (String) (iter.next());

            if (first)
                first = false;
            else
                buff.append("/");

            buff.append(str);
        }

        buff.append("]");

        return buff.toString();
    }

    public void write(OutputStream os) {
        os.write_long(getNumLevels());
        Iterator iter = iterator();
        while (iter.hasNext()) {
            String str = (String) (iter.next());
            os.write_string(str);
        }
    }
}
